﻿// 1001 求幂和.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;
/*
http://oj.daimayuan.top/course/22/problem/1106

给你三个数 n, m, p, 你需要求出 ∑i=1~m  i^n mod p。

输入格式
一个三个正整数 n, m, p，保证p是素数，并且p>n+1。

输出格式
一个正整数表示计算结果。

样例输入
2 3 101
样例输出
14
提示
对于100%
的数据，1≤n≤2000，1≤m,p≤109。
*/

typedef long long ll;
const int N = 2010;

int k, n, p;
ll comb[N][N], inv[N], s[N];

int main()
{
	scanf("%d%d%d", &k, &n, &p);
	for (int i = 0; i <= k + 1; i++) {
		comb[i][0] = comb[i][i] = 1;
		for (int j = 1; j < i; j++) {
			comb[i][j] = (comb[i - 1][j - 1] + comb[i - 1][j]) % p;
		}
	}
	inv[1] = 1;
	for (int i = 2; i <= k + 1; i++) {
		inv[i] = (p - p / i) * inv[p % i] % p;
	}
	ll pw = n+1; s[0] = n;
	for (int i = 1; i <= k; i++) {
		pw = pw * (n + 1) % p;
		s[i] = (pw - 1);
		for (int j = 0; j < i; j++) {
			s[i] = (s[i] - s[j] * comb[i + 1][j]) % p;
		}
		s[i] = s[i] * inv[i + 1] % p;
	}
	if (s[k] < 0) s[k] += p;
	printf("%lld\n",s[k]);

	return 0;
}

 